home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / FROMUTS / CDUNGEON / !CDUNGEON / c / DVERB1 < prev    next >
Text File  |  1991-05-20  |  10KB  |  448 lines

  1. /* TAKE-- BASIC TAKE SEQUENCE */
  2.  
  3. /*COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142*/
  4. /* ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED */
  5. /* WRITTEN BY R. M. SUPNIK */
  6.  
  7. #include "funcs.h"
  8. #include "vars.h"
  9.  
  10. /* TAKE AN OBJECT (FOR VERBS TAKE, PUT, DROP, READ, ETC.) */
  11.  
  12. logical take_(flg)
  13. logical flg;
  14. {
  15.     /* System generated locals */
  16.     integer i__1;
  17.     logical ret_val;
  18.  
  19.     /* Local variables */
  20.     integer oa;
  21.     integer x;
  22.  
  23.     ret_val = FALSE_;
  24. /*                         !ASSUME LOSES. */
  25.     oa = objcts_1.oactio[prsvec_1.prso - 1];
  26. /*                         !GET OBJECT ACTION. */
  27.     if (prsvec_1.prso <= star_1.strbit) {
  28.     goto L100;
  29.     }
  30. /*                         !STAR? */
  31.     ret_val = objact_();
  32. /*                         !YES, LET IT HANDLE. */
  33.     return ret_val;
  34.  
  35. L100:
  36.     x = objcts_1.ocan[prsvec_1.prso - 1];
  37. /*                         !INSIDE? */
  38.     if (prsvec_1.prso != advs_1.avehic[play_1.winner - 1]) {
  39.     goto L400;
  40.     }
  41. /*                         !HIS VEHICLE? */
  42.     rspeak_(672);
  43. /*                         !DUMMY. */
  44.     return ret_val;
  45.  
  46. L400:
  47.     if ((objcts_1.oflag1[prsvec_1.prso - 1] & TAKEBT) != 0) {
  48.     goto L500;
  49.     }
  50.     if (! oappli_(oa, 0)) {
  51.     i__1 = rnd_(5) + 552;
  52.     rspeak_(i__1);
  53.     }
  54.     return ret_val;
  55.  
  56. /* OBJECT IS TAKEABLE AND IN POSITION TO BE TAKEN. */
  57.  
  58. L500:
  59.     if (x != 0 || qhere_(prsvec_1.prso, play_1.here)) {
  60.     goto L600;
  61.     }
  62.     if (objcts_1.oadv[prsvec_1.prso - 1] == play_1.winner) {
  63.     rspeak_(557);
  64.     }
  65. /*                         !ALREADY GOT IT? */
  66.     return ret_val;
  67.  
  68. L600:
  69.     if (x != 0 && objcts_1.oadv[x - 1] == play_1.winner || weight_(0,
  70.         prsvec_1.prso, play_1.winner) + objcts_1.osize[prsvec_1.prso - 1]
  71.          <= state_1.mxload) {
  72.     goto L700;
  73.     }
  74.     rspeak_(558);
  75. /*                         !TOO MUCH WEIGHT. */
  76.     return ret_val;
  77.  
  78. L700:
  79.     ret_val = TRUE_;
  80. /*                         !AT LAST. */
  81.     if (oappli_(oa, 0)) {
  82.     return ret_val;
  83.     }
  84. /*                         !DID IT HANDLE? */
  85.     newsta_(prsvec_1.prso, 0, 0, 0, play_1.winner);
  86. /*                         !TAKE OBJECT FOR WINNER. */
  87.     objcts_1.oflag2[prsvec_1.prso - 1] |= TCHBT;
  88.     scrupd_(objcts_1.ofval[prsvec_1.prso - 1]);
  89. /*                         !UPDATE SCORE. */
  90.     objcts_1.ofval[prsvec_1.prso - 1] = 0;
  91. /*                         !CANT BE SCORED AGAIN. */
  92.     if (flg) {
  93.     rspeak_(559);
  94.     }
  95. /*                         !TELL TAKEN. */
  96.     return ret_val;
  97.  
  98. } /* take_ */
  99.  
  100. /* DROP- DROP VERB PROCESSOR */
  101.  
  102. /* DECLARATIONS */
  103.  
  104. logical drop_(z)
  105. logical z;
  106. {
  107.     /* System generated locals */
  108.     logical ret_val;
  109.  
  110.     /* Local variables */
  111.     logical f;
  112.     integer i, x;
  113.  
  114.     ret_val = TRUE_;
  115. /*                         !ASSUME WINS. */
  116.     x = objcts_1.ocan[prsvec_1.prso - 1];
  117. /*                         !GET CONTAINER. */
  118.     if (x == 0) {
  119.     goto L200;
  120.     }
  121. /*                         !IS IT INSIDE? */
  122.     if (objcts_1.oadv[x - 1] != play_1.winner) {
  123.     goto L1000;
  124.     }
  125. /*                         !IS HE CARRYING CON? */
  126.     if ((objcts_1.oflag2[x - 1] & OPENBT) != 0) {
  127.     goto L300;
  128.     }
  129.     rspsub_(525, objcts_1.odesc2[x - 1]);
  130. /*                         !CANT REACH. */
  131.     return ret_val;
  132.  
  133. L200:
  134.     if (objcts_1.oadv[prsvec_1.prso - 1] != play_1.winner) {
  135.     goto L1000;
  136.     }
  137. /*                         !IS HE CARRYING OBJ? */
  138. L300:
  139.     if (advs_1.avehic[play_1.winner - 1] == 0) {
  140.     goto L400;
  141.     }
  142. /*                         !IS HE IN VEHICLE? */
  143.     prsvec_1.prsi = advs_1.avehic[play_1.winner - 1];
  144. /*                         !YES, */
  145.     f = put_(1);
  146. /*                         !DROP INTO VEHICLE. */
  147.     prsvec_1.prsi = 0;
  148. /*                         !DISARM PARSER. */
  149.     return ret_val;
  150. /*                         !DONE. */
  151.  
  152. L400:
  153.     newsta_(prsvec_1.prso, 0, play_1.here, 0, 0);
  154. /*                         !DROP INTO ROOM. */
  155.     if (play_1.here == rindex_1.mtree) {
  156.     newsta_(prsvec_1.prso, 0, rindex_1.fore3, 0, 0);
  157.     }
  158.     scrupd_(objcts_1.ofval[prsvec_1.prso - 1]);
  159. /*                         !SCORE OBJECT. */
  160.     objcts_1.ofval[prsvec_1.prso - 1] = 0;
  161. /*                         !CANT BE SCORED AGAIN. */
  162.     objcts_1.oflag2[prsvec_1.prso - 1] |= TCHBT;
  163.  
  164.     if (objact_()) {
  165.     return ret_val;
  166.     }
  167. /*                         !DID IT HANDLE? */
  168.     i = 0;
  169. /*                         !ASSUME NOTHING TO SAY. */
  170.     if (prsvec_1.prsa == vindex_1.dropw) {
  171.     i = 528;
  172.     }
  173.     if (prsvec_1.prsa == vindex_1.throww) {
  174.     i = 529;
  175.     }
  176.     if (i != 0 && play_1.here == rindex_1.mtree) {
  177.     i = 659;
  178.     }
  179.     rspsub_(i, objcts_1.odesc2[prsvec_1.prso - 1]);
  180.     return ret_val;
  181.  
  182. L1000:
  183.     rspeak_(527);
  184. /*                         !DONT HAVE IT. */
  185.     return ret_val;
  186.  
  187. } /* drop_ */
  188.  
  189. /* PUT- PUT VERB PROCESSOR */
  190.  
  191. /* DECLARATIONS */
  192.  
  193. logical put_(flg)
  194. logical flg;
  195. {
  196.     /* System generated locals */
  197.     logical ret_val;
  198.  
  199.     /* Local variables */
  200.     integer j;
  201.     integer svi, svo;
  202.  
  203.     ret_val = FALSE_;
  204.     if (prsvec_1.prso <= star_1.strbit && prsvec_1.prsi <= star_1.strbit) {
  205.     goto L200;
  206.     }
  207.     if (! objact_()) {
  208.     rspeak_(560);
  209.     }
  210. /*                         !STAR */
  211.     ret_val = TRUE_;
  212.     return ret_val;
  213.  
  214. L200:
  215.     if ((objcts_1.oflag2[prsvec_1.prsi - 1] & OPENBT) != 0 || (
  216.         objcts_1.oflag1[prsvec_1.prsi - 1] & DOORBT + 
  217.         CONTBT) != 0 || (objcts_1.oflag2[prsvec_1.prsi - 1] & 
  218.         VEHBT) != 0) {
  219.     goto L300;
  220.     }
  221.     rspeak_(561);
  222. /*                         !CANT PUT IN THAT. */
  223.     return ret_val;
  224.  
  225. L300:
  226.     if ((objcts_1.oflag2[prsvec_1.prsi - 1] & OPENBT) != 0) {
  227.     goto L400;
  228.     }
  229. /*                         !IS IT OPEN? */
  230.     rspeak_(562);
  231. /*                         !NO, JOKE */
  232.     return ret_val;
  233.  
  234. L400:
  235.     if (prsvec_1.prso != prsvec_1.prsi) {
  236.     goto L500;
  237.     }
  238. /*                         !INTO ITSELF? */
  239.     rspeak_(563);
  240. /*                         !YES, JOKE. */
  241.     return ret_val;
  242.  
  243. L500:
  244.     if (objcts_1.ocan[prsvec_1.prso - 1] != prsvec_1.prsi) {
  245.     goto L600;
  246.     }
  247. /*                         !ALREADY INSIDE. */
  248.     rspsb2_(564, objcts_1.odesc2[prsvec_1.prso - 1], objcts_1.odesc2[
  249.         prsvec_1.prsi - 1]);
  250.     ret_val = TRUE_;
  251.     return ret_val;
  252.  
  253. L600:
  254.     if (weight_(0, prsvec_1.prso, 0) + weight_(0, prsvec_1.prsi,
  255.          0) + objcts_1.osize[prsvec_1.prso - 1] <= objcts_1.ocapac[
  256.         prsvec_1.prsi - 1]) {
  257.     goto L700;
  258.     }
  259.     rspeak_(565);
  260. /*                         !THEN CANT DO IT. */
  261.     return ret_val;
  262.  
  263. /* NOW SEE IF OBJECT (OR ITS CONTAINER) IS IN ROOM */
  264.  
  265. L700:
  266.     j = prsvec_1.prso;
  267. /*                         !START SEARCH. */
  268. L725:
  269.     if (qhere_(j, play_1.here)) {
  270.     goto L750;
  271.     }
  272. /*                         !IS IT HERE? */
  273.     j = objcts_1.ocan[j - 1];
  274.     if (j != 0) {
  275.     goto L725;
  276.     }
  277. /*                         !MORE TO DO? */
  278.     goto L800;
  279. /*                         !NO, SCH FAILS. */
  280.  
  281. L750:
  282.     svo = prsvec_1.prso;
  283. /*                         !SAVE PARSER. */
  284.     svi = prsvec_1.prsi;
  285.     prsvec_1.prsa = vindex_1.takew;
  286.     prsvec_1.prsi = 0;
  287.     if (! take_(0)) {
  288.     return ret_val;
  289.     }
  290. /*                         !TAKE OBJECT. */
  291.     prsvec_1.prsa = vindex_1.putw;
  292.     prsvec_1.prso = svo;
  293.     prsvec_1.prsi = svi;
  294.     goto L1000;
  295.  
  296. /* NOW SEE IF OBJECT IS ON PERSON. */
  297.  
  298. L800:
  299.     if (objcts_1.ocan[prsvec_1.prso - 1] == 0) {
  300.     goto L1000;
  301.     }
  302. /*                         !INSIDE? */
  303.     if ((objcts_1.oflag2[objcts_1.ocan[prsvec_1.prso - 1] - 1] & 
  304.         OPENBT) != 0) {
  305.     goto L900;
  306.     }
  307. /*                         !OPEN? */
  308.     rspsub_(566, objcts_1.odesc2[prsvec_1.prso - 1]);
  309. /*                         !LOSE. */
  310.     return ret_val;
  311.  
  312. L900:
  313.     scrupd_(objcts_1.ofval[prsvec_1.prso - 1]);
  314. /*                         !SCORE OBJECT. */
  315.     objcts_1.ofval[prsvec_1.prso - 1] = 0;
  316.     objcts_1.oflag2[prsvec_1.prso - 1] |= TCHBT;
  317.     newsta_(prsvec_1.prso, 0, 0, 0, play_1.winner);
  318. /*                         !TEMPORARILY ON WINNER. */
  319.  
  320. L1000:
  321.     if (objact_()) {
  322.     return ret_val;
  323.     }
  324. /*                         !NO, GIVE OBJECT A SHOT. */
  325.     newsta_(prsvec_1.prso, 2, 0, prsvec_1.prsi, 0);
  326. /*                         !CONTAINED INSIDE. */
  327.     ret_val = TRUE_;
  328.     return ret_val;
  329.  
  330. } /* put_ */
  331.  
  332. /* VALUAC- HANDLES VALUABLES/EVERYTHING */
  333.  
  334. void valuac_(v)
  335. integer v;
  336. {
  337.     /* System generated locals */
  338.     integer i__1;
  339.  
  340.     /* Local variables */
  341.     logical f;
  342.     integer i;
  343.     logical f1;
  344.     integer savep, saveh;
  345.  
  346.     f = TRUE_;
  347. /*                         !ASSUME NO ACTIONS. */
  348.     i = 579;
  349. /*                         !ASSUME NOT LIT. */
  350.     if (! lit_(play_1.here)) {
  351.     goto L4000;
  352.     }
  353. /*                         !IF NOT LIT, PUNT. */
  354.     i = 677;
  355. /*                         !ASSUME WRONG VERB. */
  356.     savep = prsvec_1.prso;
  357. /*                         !SAVE PRSO. */
  358.     saveh = play_1.here;
  359. /*                         !SAVE HERE. */
  360.  
  361. /* L100: */
  362.     if (prsvec_1.prsa != vindex_1.takew) {
  363.     goto L1000;
  364.     }
  365. /*                         !TAKE EVERY/VALUA? */
  366.     i__1 = objcts_1.olnt;
  367.     for (prsvec_1.prso = 1; prsvec_1.prso <= i__1; ++prsvec_1.prso) {
  368. /*                         !LOOP THRU OBJECTS. */
  369.     if (! qhere_(prsvec_1.prso, play_1.here) || (objcts_1.oflag1[
  370.         prsvec_1.prso - 1] & VISIBT) == 0 || (
  371.         objcts_1.oflag2[prsvec_1.prso - 1] & ACTRBT) != 0 || 
  372.         savep == v && objcts_1.otval[prsvec_1.prso - 1] <= 0) {
  373.         goto L500;
  374.     }
  375.     if ((objcts_1.oflag1[prsvec_1.prso - 1] & TAKEBT) == 0 && (
  376.         objcts_1.oflag2[prsvec_1.prso - 1] & TRYBT) == 0) {
  377.         goto L500;
  378.     }
  379.     f = FALSE_;
  380.     rspsub_(580, objcts_1.odesc2[prsvec_1.prso - 1]);
  381.     f1 = take_(1);
  382.     if (saveh != play_1.here) {
  383.         return;
  384.     }
  385. L500:
  386.     ;
  387.     }
  388.     goto L3000;
  389.  
  390. L1000:
  391.     if (prsvec_1.prsa != vindex_1.dropw) {
  392.     goto L2000;
  393.     }
  394. /*                         !DROP EVERY/VALUA? */
  395.     i__1 = objcts_1.olnt;
  396.     for (prsvec_1.prso = 1; prsvec_1.prso <= i__1; ++prsvec_1.prso) {
  397.     if (objcts_1.oadv[prsvec_1.prso - 1] != play_1.winner || savep == v 
  398.         && objcts_1.otval[prsvec_1.prso - 1] <= 0) {
  399.         goto L1500;
  400.     }
  401.     f = FALSE_;
  402.     rspsub_(580, objcts_1.odesc2[prsvec_1.prso - 1]);
  403.     f1 = drop_(1);
  404.     if (saveh != play_1.here) {
  405.         return;
  406.     }
  407. L1500:
  408.     ;
  409.     }
  410.     goto L3000;
  411.  
  412. L2000:
  413.     if (prsvec_1.prsa != vindex_1.putw) {
  414.     goto L3000;
  415.     }
  416. /*                         !PUT EVERY/VALUA? */
  417.     i__1 = objcts_1.olnt;
  418.     for (prsvec_1.prso = 1; prsvec_1.prso <= i__1; ++prsvec_1.prso) {
  419. /*                         !LOOP THRU OBJECTS. */
  420.     if (objcts_1.oadv[prsvec_1.prso - 1] != play_1.winner || 
  421.         prsvec_1.prso == prsvec_1.prsi || savep == v && 
  422.         objcts_1.otval[prsvec_1.prso - 1] <= 0 || (objcts_1.oflag1[
  423.         prsvec_1.prso - 1] & VISIBT) == 0) {
  424.         goto L2500;
  425.     }
  426.     f = FALSE_;
  427.     rspsub_(580, objcts_1.odesc2[prsvec_1.prso - 1]);
  428.     f1 = put_(1);
  429.     if (saveh != play_1.here) {
  430.         return;
  431.     }
  432. L2500:
  433.     ;
  434.     }
  435.  
  436. L3000:
  437.     i = 581;
  438.     if (savep == v) {
  439.     i = 582;
  440.     }
  441. /*                         !CHOOSE MESSAGE. */
  442. L4000:
  443.     if (f) {
  444.     rspeak_(i);
  445.     }
  446. /*                         !IF NOTHING, REPORT. */
  447. } /* valuac_ */
  448.